
import EntradaSalida.Entrada;
import EntradaSalida.Salida;

/**
 *
 * @author Alejandros y Nelea
 */
public class Main_proyecto {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        //Declaración de variables
        int dimension, numBombas, porcBombas, casillas;

        Juego juego = new Juego();
        Partida partida = new Partida();
        Entrada entrada = new Entrada();
        Salida sal = new Salida();

        juego.contadorPartida = 1;

        //Pedimos introducir los datos para la partida
        dimension = entrada.introducirDimensiones();

        porcBombas = entrada.introducirDificultad();
        /*Calculamos el número de minas que tiene que tener el tablero segun 
         * su dimensión y la dificultad */
        numBombas = (int) (Math.pow(dimension, 2) * porcBombas / 100);
        //Calculamos el número de casillas que hay que destapar
        casillas = (int) (Math.pow(dimension, 2) - numBombas);

        while (true) {

            //Volvemos a poner a 0 el contador de casillas descubiertas
            partida.casillasDescubiertas = 0;

            String opcion = "";
            //Inicializamos los tableros
            juego.tableroConsulta = new char[dimension][dimension];
            juego.tableroPartida = new char[dimension][dimension];

            juego.inicializarTablero(juego.tableroConsulta, '0');
            juego.inicializarTablero(juego.tableroPartida, '*');
            /*Colocamos las minas aleatoriamente y ponemos el numero de minas 
             *alrededor de cada posición*/

            juego.colocarMinasAleatorias(numBombas);

            juego.numeroMinasPosicion();

            sal.mostrarTablero(juego.tableroPartida);

            //Comienza el juego
            while (true) {

                System.out.println("Casillas descubiertas "
                        + partida.casillasDescubiertas + "/" + casillas);

                int fila = 0;
                int columna = 0;
                sal.mostrarCadenaTexto("Introduce fila a destapar:");
                fila = entrada.introducirPosición(dimension) - 1;
                sal.mostrarCadenaTexto("Introduce columna a destapar");
                columna = entrada.introducirPosición(dimension) - 1;

                char valorOculto = partida.comprobarPosicion(juego.tableroConsulta,
                        juego.tableroPartida, fila,
                        columna);

                /*Habiamos pensado en poner esto en un metodo a parte pero para 
                 * ser fieles al diseño entregado lo hemos dejado asi*/
                switch (valorOculto) {
                    case '1':
                    case '2':
                    case '3':
                    case '4':
                    case '5':
                    case '6':
                    case '7':
                    case '8':
                        partida.casillasDescubiertas++;
                        sal.mostrarTablero(juego.tableroPartida);
                        break;
                    case 'B':
                        sal.mostrarTablero(juego.tableroPartida);
                        sal.mostrarCadenaTexto("Has hecho explotar una mina, "
                                + "por lo que la partida ha acabado.");
                        opcion = entrada.mostrarMenu();
                        break;
                    case '0':
                        partida.casillasDescubiertas++;
                        partida.destaparAlrededor(juego.tableroConsulta,
                                juego.tableroPartida, fila, columna);
                        sal.mostrarTablero(juego.tableroPartida);
                        break;
                }
                /*Condicionamos que si se han descubierto todas las casillas,
                 *termine la partida*/
                if (casillas == partida.casillasDescubiertas) {
                    sal.mostrarCadenaTexto("Has destapado todas las casillas\n"
                            + "VICTORIA!");
                    opcion = entrada.mostrarMenu();
                }

                /*Almacenamos las casillas descubiertas a lo largo de todas
                 *las partidas*/
                partida.estadisticaDescubiertas =
                        juego.redimensionarArray(partida.estadisticaDescubiertas);
                partida.estadisticaDescubiertas[juego.contadorPartida - 1] =
                        partida.casillasDescubiertas;



                if (opcion.matches("[Ss]")) {
                    juego.contadorPartida++;
                    break;

                } else if (opcion.matches("[Nn]")) {
                    sal.mostrarCadenaTexto("A continuación un detalle de las "
                            + "partidas jugadas:\n");
                    sal.mostrarEstadisticas(dimension, casillas, numBombas,
                            juego.contadorPartida,
                            partida.estadisticaDescubiertas);
                    System.exit(0);

                }
            }
            continue;
        }
    }
}